package com.hspedu.seckill.rabbitmq;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.annotation.Resource;

/**
 * @author: xujiabing
 * @date: 2024-11-24 19:53
 * @description:
 */
@Controller
public class RabbitMQHandler {
    @Resource
    private MQSender mqSender;

    /**
     * @description: 调用消息生产者 发送到指定队列
     * @author: xujiabing
     * @date: 2024-11-25 21:52
     * @param:
     * @return: void
     */
    @RequestMapping("/mq")
    @ResponseBody
    public void mq() {
        mqSender.send("hello world");
    }

    /**
     * @description: 调用消息生产者 发送到指定交换机(广播模式)
     * @author: xujiabing
     * @date: 2024-11-25 21:52
     * @param:
     * @return: void
     */
    @RequestMapping("/mq/fanout")
    @ResponseBody
    public void fanout() {
        mqSender.sendFanout("hello jack");
    }

    /**
     * @description: 调用消息生产者 发送到指定交换机(路由模式)
     * @author: xujiabing
     * @date: 2024-11-27 21:25
     * @param:
     * @return: void
     */
    @GetMapping("/mq/direct01")
    @ResponseBody
    public void direct01() {
        mqSender.sendDirect1("hello:red");
    }

    /**
     * @description: 调用消息生产者 发送到指定交换机(路由模式)
     * @author: xujiabing
     * @date: 2024-11-27 21:25
     * @param:
     * @return: void
     */
    @GetMapping("/mq/direct02")
    @ResponseBody
    public void direct02() {
        mqSender.sendDirect2("hello:green");
    }

    /**
     * @description: 调用消息生产者 发送到指定交换机(主题模式)
     * @author: xujiabing
     * @date: 2024-12-01 17:56
     * @param:
     * @return: void
     */
    @GetMapping("/mq/topic01")
    @ResponseBody
    public void topic01() {
        mqSender.sendTopic01("hello topic01");
    }

    /**
     * @description: 调用消息生产者 发送到指定交换机(主题模式)
     * @author: xujiabing
     * @date: 2024-12-01 17:56
     * @param:
     * @return: void
     */
    @GetMapping("/mq/topic02")
    @ResponseBody
    public void topic02() {
        mqSender.sendTopic02("hello topic02");
    }

    /**
     * @description: 调用消息生产者 发送到指定交换机(header模式)
     * @author: xujiabing
     * @date: 2024-12-04 21:02
     * @param:
     * @return: void
     */
    @RequestMapping(value = "/mq/header01")
    @ResponseBody
    public void header01() {
        //2个队列都能接收到
        mqSender.sendHeader01("Hello ABC");
    }

    /**
     * @description: 调用消息生产者 发送到指定交换机(header模式)
     * @author: xujiabing
     * @date: 2024-12-04 21:02
     * @param:
     * @return: void
     */
    @RequestMapping(value = "/mq/header02")
    @ResponseBody
    public void header02() {
        //只能被第一个队列接收到
        mqSender.sendHeader02("Hello Hsp");
    }
}
